package com.wencai.daily;

import com.wencai.daily.bean.DailyData;
import com.wencai.daily.utils.ReadUtils;

import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * 涨幅大于等于5的情况下,前5天的平均涨幅: -2=22251, -1=50561, 0=81961, 1=66507, 2=36404
 *
 * @author wangpan
 * @date 2023/6/10
 */
public class HintFinder {
    public static void main(String[] args) throws IOException {
        Map<String, List<DailyData>> stringListMap = ReadUtils.readAllDailyDatas();
        Map<Integer, Integer> map = new LinkedHashMap<>();
        initMap(map);

        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= 5; j++) {
                if (i >= j) {
                    continue;
                }
                double avg = getAvg(stringListMap, i, j);
                System.out.println(i + "\t" + j + "\t" + avg);
            }
        }
    }

    private static double getAvg(Map<String, List<DailyData>> map, int min, int max) {
        int count = 0;
        double sum = 0;
        for (List<DailyData> list : map.values()) {
            for (int i = 0; i < list.size() - 1; i++) {
                if (i < 20) {
                    continue;
                }
                double avg = list.subList(i - 5, i).stream().mapToDouble(item -> item.getPctChg()).average().getAsDouble();
                if (avg > min && avg < max && i != list.size() - 1 && list.get(i - 1).getPctChg() < 9.5) {
                    double pctChg = list.get(i).getPctChg();
                    count++;
                    sum = sum + pctChg;
                }
            }
        }
        return sum / count;
    }

    private static void initMap(Map<Integer, Integer> map) {
        map.put(-10, 0);
        map.put(-9, 0);
        map.put(-8, 0);
        map.put(-7, 0);
        map.put(-6, 0);
        map.put(-5, 0);
        map.put(-4, 0);
        map.put(-3, 0);
        map.put(-2, 0);
        map.put(-1, 0);
        map.put(0, 0);
        map.put(1, 0);
        map.put(2, 0);
        map.put(3, 0);
        map.put(4, 0);
        map.put(5, 0);
        map.put(6, 0);
        map.put(7, 0);
        map.put(8, 0);
        map.put(9, 0);
        map.put(10, 0);
    }
}
